package datos.gestores;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;

import datos.entidades.Acoplado;
import datos.entidades.Camion;
import datos.entidades.Camioneta;
import datos.entidades.Vehiculo;

public class GestorDatosVehiculo implements GestorDatos {

	private static int cantVehiculos;
	private static List <Vehiculo> vehiculos;
	private File dataFile[];
	private final String CAMION = "camiones.xml";
	private final String CAMIONETA = "camionetas.xml";
	private final String ACOPLADO = "acoplados.xml";
	
    public GestorDatosVehiculo (String folderPath) {
    	dataFile = new File[3];
    	dataFile[0] = new File(folderPath.concat(CAMIONETA));
    	System.out.println(folderPath.concat(CAMIONETA));
    	dataFile[1] = new File(folderPath.concat(CAMION));
    	System.out.println(folderPath.concat(CAMION));
    	dataFile[2] = new File(folderPath.concat(ACOPLADO));
    	System.out.println(folderPath.concat(ACOPLADO));
    	vehiculos = new ArrayList <Vehiculo> ();
    	cantVehiculos = 0;
    }
    
    public GestorDatosVehiculo (){
    	
    }

    public void set (int idx, Object vehiculo) {
    	vehiculos.set(idx, (Vehiculo) vehiculo);
    }

    public boolean remove (Object vehiculo) {
    	boolean exito;
    	exito = vehiculos.remove((Vehiculo) vehiculo);
    	if (exito == true) setCantVehiculos(getCantVehiculos()-1);
    	return exito;
    }
    
    public void remove (int idx) {
    	vehiculos.remove(idx);
    	setCantVehiculos(getCantVehiculos()-1);
    }

    public Object get (int idx) {
        Object vehiculo;
        vehiculo = vehiculos.get(idx);
    	return vehiculo;
    }

    public boolean add (Object vehiculo) {
    	boolean exito;
    	exito = vehiculos.add((Vehiculo) vehiculo);
    	if (exito == true) setCantVehiculos(getCantVehiculos()+1);
    	return exito;
    }

    public void listar () {
        Iterator<Vehiculo> iter = vehiculos.iterator();
        while (iter.hasNext())
          System.out.println(iter.next());
    }

    public void loadData () throws IOException {	 // Carga en memoria la info contenida en el archivo de clientes.
    	Vehiculo nuevoVehiculo;
    	int cantidadEsteVehiculo;
    	for (int i = 0 ; i < dataFile.length ; ++i) {
	    	Scanner input = new Scanner (dataFile[i]);
	    	cantidadEsteVehiculo = input.nextInt();
	        cantVehiculos += cantidadEsteVehiculo;
	    	for (int j = 0 ; j < cantidadEsteVehiculo ; j++ ) {
	    		switch (i) {
	    			case 0: nuevoVehiculo = new Camioneta(); break;
	    			case 1: nuevoVehiculo = new Camion(); break;
	    			default : nuevoVehiculo = new Acoplado(); break;
	    		}
	    		while (!input.hasNext(PAT)) nuevoVehiculo.addPatente(input.next());
				input.findInLine(PAT);
				vehiculos.add(nuevoVehiculo);
	    	}
    	}
    }

    public void saveData () {}

    public int indexOf (String patente ) {		
    	// Se le pasa un string de las lista y devuelve el id correspondiente. Si no existe el string devuelve -1
    	int i = 0;
		int cantReg = getCantVehiculos();
    	while ((i <= cantReg) && (!((Vehiculo)get(i)).getPatente().equals(patente) )) i++;
		if (i <= cantReg) return i;
		else return -1;
    }
    
	public static void setCantVehiculos(int cantVehiculos) {
		GestorDatosVehiculo.cantVehiculos = cantVehiculos;
	}

	public static int getCantVehiculos() {
		return cantVehiculos;
	}

	public static void setVehiculos(List <Vehiculo> vehiculos) {
		GestorDatosVehiculo.vehiculos = vehiculos;
	}

	public static List <Vehiculo> getVehiculos() {
		return vehiculos;
	}

	public int indexOf (Object o){
		return 0;
		
	}
}

